package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.QueryUserService;
import com.example.utils.VerifyUtil;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.OutputStream;


@RestController("/")
public class TestController {
    /*
     * @Resource和@Autowired注解都是用来实现依赖注入的。
     * 只是@Autowired按byType自动注入，而@Resource默认按 byName自动注入。@Resource有两个重要的属性，分是name和type。
     * Spring将name属性解析为bean的名字（最需要重新理解的就是这个bean名字），而type属性则解析为bean的类型
     * 所以如果使用name属性，则使用byName的自动注入策略，而使用type属性时则使用byType自动注入策略。
     * 如果既不指定name也不指定type属性，这时将通过反射机制使用byName自动注入策略。
     */
    @Resource(name = "QueryUserServiceImpl")
    private QueryUserService queryUserService;

    @RequestMapping("/test")
    public User login(@ModelAttribute User user , HttpServletRequest request){
        //JSONObject userJson = JSONObject.parseObject(user.toString());
      //  JSONObject userJson = JSONObject.parseObject(String.valueOf(user));

        User  login_user = queryUserService.queryUser(user);

        if (login_user!=null){
            System.out.println("登录成功！"+login_user);
            return login_user;
        } else {
           // return "登录失败！ ["+user.toString()+"] ";
            System.out.println(user);
            return user;
        }

    }


    /*验证码*/
    @RequestMapping("/valicode")
    public void valicode(HttpServletResponse response, HttpSession session) throws Exception{
        //利用图片工具生成图片
        //第一个参数是生成的验证码，第二个参数是生成的图片
        Object[] objs = VerifyUtil.createImage();
        //将验证码存入Session
        session.setAttribute("imageCode",objs[0]);

        System.out.println(objs[0]);
        //将图片输出给浏览器
        BufferedImage image = (BufferedImage) objs[1];
        response.setContentType("image/png");
        OutputStream os = response.getOutputStream();
        ImageIO.write(image, "png", os);
    }

}
